home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 011-020 / amok16 / m2make / make.dok < prev    next >
Text File  |  1993-11-04  |  12KB  |  296 lines

  1. ----------------------------------------------------------------------
  2. Dokumentation zu "M2Make" Version 1.5
  3. Testversion "gamma" 8.Apr.1989
  4. Autor: Nicolas Benezan, Postwiesenstr. 2, D7000 Stuttgart 60
  5. ----------------------------------------------------------------------
  6.  
  7. Copyright
  8. ­­­­­­­­­
  9. Das komplette Packet (siehe unten) ist Shareware, das heißt, es darf
  10. für jedermann frei kopiert werden, solange die Vollständigkeit des
  11. Programms, dieses Kopierechtvermerks und der Dokumentation gewähleistet
  12. ist. Jeder darf das Programm testen, um festzustellen, ob es ihm geeignet
  13. erscheint. Bei Benutzung über den reinen Probebetrieb hinaus wird der
  14. Benutzer gebeten, mit einem Unkostenbeitrag die Pflege des Programms und
  15. die Entwicklung neuer Software zu unterstützen (Vorschlag: ca. 25DM).
  16.  
  17. Noch ein Wort zur Sharewaregebühr: Leider hat sich die Idee der Shareware
  18. hier in Deutschland noch nicht durchgesetzt, was wir (Amok) an der bisher
  19. geringen Resonanz ablesen. Ich möchte deshalb nocheinmal dazu aufrufen,
  20. dieser Vertriebsart bitte doch mehr Beachtung zu schenken. Die Vorteile der
  21. Shareware liegen klar auf der Hand:
  22.  
  23. * Niemand braucht "die Katze im Sack" zu kaufen. Die Programme können
  24. getestet werden, bevor man sich entscheidet.
  25.  
  26. * Es gibt keinen teueren Vertriebsweg, bei der eine Menge Händler
  27. mitverdienen. Shareware ist deshalb bei vergleichbarer Qualität billiger
  28. als komerzielle Produkte (vgl. "Make Utility" von A+L AG).
  29.  
  30. * Man bekommt oftmals einen besseren Service als bei komerziellen
  31. Programmen, da man sich direkt mit dem Programmierer in Verbindung setzten
  32. kann. Probleme und Bugs werden schneller beseitigt.
  33.  
  34. Die Sharewaregebühr verlange ich nicht um reich zu werden (ich verdiene
  35. genug an PC-Programmen), sondern weil ich nicht einsehe, beim Programmieren
  36. und Verbreiten von, wie ich meine nützlichen, Programmen auch noch
  37. draufzuzahlen. Ich will damit auch nicht einem armen Schüler die letzte
  38. Mark aus der Tasche ziehen, sondern ich weiß genau, das es eine Menge
  39. Leute gibt, die genug Geld haben aber ihre Sharewareprogramme umsonst
  40. benutzen wollen (sei es aus Faulheit zu zahlen, oder wegen miesem
  41. Charakter).
  42. Wenn Sie sich trotzdem dazu entscheiden (hoffentlich wenigstens noch
  43. schlechten Gewissens), Ihren Beitrag nicht zu zahlen, obwohl Sie das
  44. Programm regelmäßig benutzen, bedenken Sie bitte, daß SIE dann daran Schuld
  45. sein könnten, daß mir die Sache zu dumm wird, und ich in Zukunkt meine
  46. Programme so schreibe, daß sie nur bei mir laufen und nur ich sie bedienen
  47. kann, weil sie beim kleinsten Fehler abstürzen (ein solches Programm
  48. braucht nämlich höchstens ½ des Aufwandes eines benutzerfreundlichen).
  49. Das wäre schade, denn habe bis jetzt meine Programme immer versucht, benutzer-
  50. freundlich zu schreiben und sie zu pflegen/debuggen.
  51.  
  52. "M2Make" ist keine Public Domain Software.
  53. © 1989 Nicolas Benezan
  54. Alle Rechte vorbehalten
  55.  
  56.  
  57. Einleitung
  58. ­­­­­­­­­­
  59. Für all diejenigen, die noch nicht wissen, was ein "Make-Utility" ist:
  60. In Modula kann es sehr nervend sein, wenn bei einem mittleren bis größeren
  61. Projekt (mehr als 3 Module) ein Definitionsmodul neu compiliert werden muß.
  62. Es müssen dann nämlich alle Module, die dieses Modul importieren, ebenfalls
  63. neu compiliert werden. Ein "Make" nimmt einem diese Arbeit ab und untersucht
  64. automatisch, welche Module geändert wurden, und welche von diesen abhängen.
  65. In einem Durchlauf werden die erforderlichen Module dann in der richtigen
  66. Reihenfolge compiliert und das Programm anschließend gleich gelinkt.
  67.  
  68.  
  69. Umfang des Packets
  70. ­­­­­­­­­­­­­­­­­­
  71. Zum vollständigen Umfang des Packets "M2Make" gehören:
  72. (Stand 17.02.89)
  73.  
  74. * Make.dok              (dieser Text)
  75. * Make.mod,             Make.obj
  76. * ModuleInfos.def,      ModuleInfos.sym
  77.   ModuleInfos.mod,      ModuleInfos.obj
  78. * Interface.def,        Interface.sym
  79.   Interface.mod,        Interface.obj
  80. * SrcScanner.def,       SrcScanner.sym
  81.   SrcScanner.mod,       SrcScanner.obj
  82. * SymScanner.def,       SymScanner.sym
  83.   SymScanner.mod,       SymScanner.obj
  84. * ObjScanner.def,       ObjScanner.sym
  85.   ObjScanner.mod,       ObjScanner.obj
  86. * PathFinder.def,       PathFinder.sym
  87.   PathFinder.mod,       PathFinder.obj
  88. * Environment.def,      Environment.sym
  89.   Environment.mod,      Environment.obj
  90. * m2m                   (gelinktes Make, renamed)
  91. * m2m.info              (spezielles Icon)
  92.  
  93. Zum Linken von Make werden noch folgende Module benötigt (bitte schauen sie
  94. im Inhaltsverzeichnis (Datei ":Inhalt") dieser Diskette nach):
  95.  
  96. * MemSystem             V1.2 oder höher
  97. * ErrorReq.def          V1.2 oder höher
  98. * TaskMemory.def
  99. * AVL.def               V1.2 oder höher
  100. * List.def              V1.1 oder höher
  101. * Queue.def             V1.1 oder höher
  102.  
  103. "AVL", "List" und "Queue" sind von Michael Frieß, dem ich an dieser
  104. Stelle danken möchte.
  105.  
  106.  
  107. Bedienung
  108. ­­­­­­­­­
  109. a) Workbench
  110. ------------
  111. Anklicken des Hauptmoduls (zB. Make.mod) und erweitertes Doppelklicken von
  112. m2m.
  113.  
  114. b) CLI
  115. ------
  116. M2m mit den Hauptmodul (und eventuell Optionen als Argument aufrufen.
  117. Beispiel:
  118.  
  119. > m2m -di :M2make/Make.mod
  120.  
  121. Tip: Die Erweiterung ".mod" kann weggelassen werden; steht das Haupt-
  122. modul im txt-Dir, kann man m2m auch vom darüberliegenden Dir aus
  123. aufrufen. Beispiel:
  124.  
  125. > m2m Make
  126.  
  127. anstatt:
  128.  
  129. > m2m txt/Make.mod
  130.  
  131. Zu beachten
  132. -----------
  133. Bitte installieren Sie m2make so, daß folgende Voraussetzungen gegeben sind.
  134. Falls das Programm nicht erwartungsgemäß funktioniert, prüfen sie erst, ob es
  135. nicht an einem dieser Punkte liegt. Es wird erwartet, daß...
  136.  
  137. * Implementations- und Hauptmodule die Erweiterung ".mod" haben,
  138. * Definitionsmodule die Erweiterung ".def" tragen,
  139. * Zusammengehörende Source und Sym/Obj-Code im selben Projektordner stehen,
  140. * der Compiler "m2c",
  141. * der Linker "m2l" heißt und
  142. * daß beide in dem Directory stehen, das im m2m.info "ToolTypes"-Feld
  143.   nach "SYSTEMPATH=" eingetragen ist (default: "m2:"),
  144. * daß die Systemzeit streng monoton steigend ist (siehe Vorgehensweise)
  145. * daß alle zum Programm gehörigen Module einen unterschiedlichen Namen
  146.   haben, dh. wenn "A" "C" importiert, und "B" importiert "C", dann muß
  147.   "C" beides mal das selbe Modul meinen. (Innerhalb der Suchpfade
  148.   (globale/lokale Pfaddatei) darf es hingegen ruhig mehrere Module mit
  149.   gleichem Namen geben, solange sie nicht parallel importiert werden.)
  150.  
  151. Vorsicht: Es sollte Version 3.2 (oder höher) des Compilers verwendet werden.
  152. Verwenden sie ältere Versionen, beachten Sie bitte, daß die Pfaddatei ("path",
  153. nicht "m2path" im Systemverzeichnis "m2:" gesucht wird. Achten sie darauf,
  154. daß ein "ASSIGN M2:" auf ihr Verzeichnis gemacht wurde, in dem bei Ihnen Compiler
  155. und Linker stehen (bzw. Tragen sie ihr Verzeichnis in das Tooltypes-Feld
  156. ein).
  157.  
  158.  
  159. Installation / Optionen
  160. -----------------------
  161. Das Fenster (bzw. die Datei), das beim Start von der Workbench geöffnet
  162. wird, kann im "ToolTypes"-Feld des Icons (m2m.info) nach "OUTPUT="
  163. eingetragen werden. Das Verzeichnis, in dem sich Compiler und Linker sowie
  164. die Pfaddatei "path" befindet, kann nach "SYSTEMPATH=" eingetragen werden.
  165.  
  166. Optionen können entweder in der Kommandozeile des CLI oder nach "OPTIONS="
  167. bei Tooltypes angegeben werden. Beachten Sie die jeweilige Schreibweise:
  168.  
  169. Beispiel:
  170.  
  171. CLI> m2m -iq main.mod
  172.  
  173. Tooltypes: OPTIONS=I|Q
  174.  
  175. Erlaubte Optionen sind a, i, d, q, x (Bedeutung siehe unten). beim CLI ist
  176. die Groß/Kleinschreibung egal, beim ToolTypes-Feld muß man die Optionen groß
  177. schreiben und durch senkrechte Striche ("|") trennen. Leerzeichen sind nicht
  178. erlaubt. Optionen beeinflussen den Make-, Compiler- und/oder den Linkerlauf:
  179.  
  180. Make-Optionen:    a - es werden grundsätzlich alle Module compiliert (wenn
  181.                       möglich), egal ob sie geändert wurden oder nicht.
  182.  
  183. Compileroptionen: i - keine Icons
  184.                   d - keine Referenzdateien (".ref") für den Debugger
  185.                   q - Modulnamen werden nicht aufgelistet
  186.  
  187. Linkeroptionen:   i - keine Icons
  188.                   q - keine Referenzdateien
  189.                   x - keine ausführliche Modulliste im gelinkten Programm
  190.  
  191.  
  192.  
  193.  
  194. Vorgehensweise von Make
  195. -----------------------
  196. Bei jedem Makerlauf wird der "Importbaum" ausgehend vom Hauptmodul
  197. rekursiv untersucht, indem alle Sym/Obj-Dateien, falls vorhanden und
  198. gültig (Versionskontrolle), oder der Sourcecode gelesen wird.
  199. Dabei wird nach folgendem Schema vorgegangen:
  200.  
  201. 1) Bevor ein Definitionsmodul untersucht wird, werden alle importierten
  202.    Definitionsmodule geprüft.
  203.  
  204. 2) Bevor ein Implementations- oder Hauptmodul untersucht wird,
  205.    werden alle importierten Definitionsmodule geprüft.
  206.  
  207. 3) Außerdem muß ein Definitionsmodul immer vor seiner Implementation
  208.    untersucht werden.
  209.  
  210. (Anm.: 3) ist übrigens gar nicht so einfach zu erfüllen, wie es aussieht.
  211. 1) gilt nämlich rekursiv auch auf die importierten Module. Deshalb ist
  212. eine Queue (Make.ModQueue) nötig, die sicherstellt, daß bevor ein
  213. Implementationsmodul untersucht wird, das Programm aus der Rekursion 1)
  214. wieder vollständig zurückgekehrt ist. Wer einen besseren Algorithmus
  215. hat, möge ihn mir bitte verraten. Aber bitte vorher gründlich nachdenken!)
  216.  
  217. Neucompilieren ist notwendig, wenn:
  218.  
  219. * ein importiertes Definitionsmodul compiliert wurde,
  220.  
  221. * bei einem Definitionsmodul die ".sym"-Datei älter ist als die
  222.   ".def"-Datei bzw. keine ".sym"-Datei vorhanden ist, oder
  223.  
  224. * bei einem Implementationsmodul...
  225.   wenn das zugehörige Definitionsmodul compiliert wurde, oder
  226.   wenn die ".obj"-Datei älter als die ".mod"-Datei ist, oder
  227.   wenn die ".obj"-Datei fehlt.
  228.  
  229. Ein Wort zur Systemzeit: Um festzustellen, welche Datei älter ist
  230. (wessen Erzeugen oder Änderung länger her ist), wird das von Dos an
  231. jede Datei vergebene Datum abgefragt. Dabei muß die Systemzeit
  232. NICHT unbedingt richtig gesetzt sein. Make läuft (theoretisch) also
  233. auch auf Rechnern ohne Echtzeituhr (bzw. solchen, deren Besitzer zu
  234. faul sind, beim Booten die Zeit einzugeben). Es wird lediglich
  235. vorausgesetzt, daß die Systemzeit streng monoton steigend ist, was Dos
  236. automatisch gewährleistet. (Dos vermerkt nämlich auf jeder Diskette die
  237. Zeit des letzten Schreibvorgangs und macht vor jeder Änderung:
  238. IF SysTimeNotSet AND (DiskTime>SysTime) THEN Systime:=DiskTime END).
  239. Probleme gibts nur dann, wenn jemand sträflicherweise die Zeit rückwärts
  240. setzt, oder eine Diskette von einem Rechner, dessen Uhr auf Zukunft
  241. gestellt war, auf einem mit korrekt gestellter Uhr verwendet wird.
  242.  
  243. Um unnötige Diskettenzugriffe und Zeit zu sparen, werden folgende
  244. Methoden verwendet:
  245.  
  246. * Sind Sym/Obj-Dateien vorhanden und gültig (Versionskontrolle), werden
  247.   sie den Def/Mod-Datei vorgezogen, da erstere schneller ausgewertet
  248.   werden können.
  249.  
  250. * Ein Source-, Symbol- oder Object-File wird nie zweimal gelesen,
  251.   sondern Name und Zustand werden, nachdem die Files einmal untersucht
  252.   wurden, im Speicher abgelegt.
  253.  
  254. * Ein Pfad wird nie zweimal gesucht. Wurde ein Projektpfad einmal
  255.   gefunden merkt sich das Programm den Lock.
  256.  
  257. * Die globale Pfaddatei wird gleich zu Anfang im voraus gelesen.
  258.  
  259. * Standard-Bibliotheksmodule (stdlib), deren Source nicht gefunden wird,
  260.   werden nicht weiter untersucht, was auch sinnlos wäre, da sie sowieso
  261.   nicht neu übersetzt werden könnten.
  262.  
  263. * Importlisten werden auf einen Schub in eine Queue übertragen und die
  264.   Source/Objektdatei gleich wieder geschlossen. Sonst wären beim
  265.   rekursiven Untersuchen der Module (siehe oben) möglicherweise
  266.   hunderte von Files gleichzeitig offen. Dos würde es zwar verkraften,
  267.   aber besonders gesund wäre es auch nicht.
  268.  
  269. Den Sourcecode vom gesammten M2Make zu erläutern, wäre an dieser Stelle
  270. übertrieben. Falls jemand Fragen dazu hat, bin ich gerne zu Auskünften
  271. bereit.
  272.  
  273.  
  274. Sonstiges
  275. ­­­­­­­­­
  276. Wenn Sie eine andere Stackgröße für den Compiler/Linker wünschen - im Modul
  277. "Interface" stehen die verwendeten Werte (Konstanten).
  278.  
  279. Wenn Sie bemerken, daß diese Version des Makes manchmal mit seltsamen
  280. Fehlermeldungen aussteigt (bei ordnungsgemäßer Installation eigentlich
  281. selten), daß es FileLocks frißt usw. , dann stempeln Sie es bitte nicht
  282. gleich als unbrauchbar ab. Dies ist die Gamma Testversion. Registrierte
  283. Benutzer erhalten automatisch die offizielle Version, die diese Mängel
  284. nicht mehr aufweist. Dies ist keine absichtliche Erpressung, sondern ist
  285. durch Terminschwierigkeiten bedingt.
  286.  
  287. Wenn Sie je Probleme mit "Make" haben, wenden Sie sich an mich (Bitte
  288. Sharewaregebühr nicht vergessen).
  289. Bug Reports und Verbesserungsvorschläge nehme ich auch gerne von nicht
  290. eingetragenen Benutzern entgegen.
  291.  
  292. -----------
  293. Bene.
  294.  
  295.  
  296.